%module OgreLight

%{
#include "OGRE/OgreLight.h"
	%}

%import "OgreColourValue.i"
%import "OgrePrerequisites.i"
%import "OgreVector3.i"

 /*
#include "OgrePrerequisites.h"

#include "OgreColourValue.h"
#include "OgreVector3.h"
#include "OgreVector4.h"
#include "OgreString.h"
#include "OgreMovableObject.h"
#include "OgrePlaneBoundedVolume.h"
#include "OgreShadowCameraSetup.h"
 */

namespace Ogre {

	class Light //: public MovableObject
	{
	public:

        enum LightTypes
        {
            LT_POINT = 0,
            LT_DIRECTIONAL = 1,
            LT_SPOTLIGHT = 2
        };

        void setType(LightTypes type);

        LightTypes getType(void) const;

        void setDiffuseColour(Real red, Real green, Real blue);

        void setDiffuseColour(const ColourValue& colour);

        const ColourValue& getDiffuseColour(void) const;


        void setSpecularColour(Real red, Real green, Real blue);

        void setSpecularColour(const ColourValue& colour);

        const ColourValue& getSpecularColour(void) const;

        void setAttenuation(Real range, Real constant, Real linear, Real quadratic);

        Real getAttenuationRange(void) const;

        Real getAttenuationConstant(void) const;

        Real getAttenuationLinear(void) const;

        Real getAttenuationQuadric(void) const;

        void setPosition(Real x, Real y, Real z);

        void setPosition(const Vector3& vec);

        const Vector3& getPosition(void) const;

        void setDirection(Real x, Real y, Real z);

        void setDirection(const Vector3& vec);

        const Vector3& getDirection(void) const;

        void setSpotlightRange(const Radian& innerAngle, const Radian& outerAngle, Real falloff = 1.0);

        const Radian& getSpotlightInnerAngle(void) const;

        const Radian& getSpotlightOuterAngle(void) const;

        Real getSpotlightFalloff(void) const;

	void setSpotlightInnerAngle(const Radian& val);

	void setSpotlightOuterAngle(const Radian& val);

	void setSpotlightFalloff(Real val);

	void setPowerScale(Real power);

	Real getPowerScale(void) const;


//        const AxisAlignedBox& getBoundingBox(void) const;

        void setVisible(bool visible);

        void setShadowFarDistance(Real distance);

        void resetShadowFarDistance(void);

        Real getShadowFarDistance(void) const;
        Real getShadowFarDistanceSquared(void) const;

	void setShadowNearClipDistance(Real nearClip) { mShadowNearClipDist = nearClip; }

	Real getShadowNearClipDistance() const { return mShadowNearClipDist; }

	void setShadowFarClipDistance(Real farClip) { mShadowFarClipDist = farClip; }

	Real getShadowFarClipDistance() const { return mShadowFarClipDist; }

    };

	class LightFactory //: public MovableObjectFactory
	{
	public:
		static String FACTORY_TYPE_NAME;

		const String& getType(void) const;
//		void destroyInstance( MovableObject* obj);  

	};
} // Namespace
